top.tsx 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. "use client";
  2. import { CashbackTypes } from "@/api/cashback";
  3. import { UserVipInfo } from "@/api/user";
  4. import TipsModal from "@/components/TipsModal";
  5. import VipIcon from "@/components/VipIcon";
  6. import { percentage } from "@/utils/methods";
  7. import { ProgressBar } from "antd-mobile";
  8. import clsx from "clsx";
  9. import React from "react";
  10. import CashbackTable from "./CashbackTable";
  11. import styles from "./page.module.scss";
  12. interface Props {
  13. data: UserVipInfo;
  14. cashbackInfo: CashbackTypes;
  15. }
  16. const Top: React.FC<Props> = ({ data, cashbackInfo }) => {
  17. const descRef = React.useRef<any>(null);
  18. return (
  19. <>
  20. <div className={styles.top}>
  21. <div className={styles.topheader}>
  22. <div className="fobnt-bold mb-[.06rem] text-[.18rem]">VIP1</div>
  23. <div className="text-[.11rem]">
  24. <span>{data?.vip_exp}XP</span>
  25. <span className="text-[#788f97]">/{data?.vip_score_exp}XP</span>
  26. </div>
  27. <div className="relative my-[.1rem] mr-[.4rem]">
  28. <ProgressBar
  29. percent={percentage(data?.vip_exp, data?.vip_score_exp)}
  30. style={{
  31. "--fill-color": "#11de68",
  32. "--track-color": "#0f1219",
  33. "--track-width": "0.07rem",
  34. }}
  35. ></ProgressBar>
  36. <div
  37. className="absolute top-[50%] h-[.13rem] w-[.13rem] -translate-x-[50%] -translate-y-[50%] rounded-[50%] bg-[#fff]"
  38. style={{
  39. left: `${percentage(data?.vip_exp, data?.vip_score_exp)}%`,
  40. }}
  41. ></div>
  42. </div>
  43. <div className="text-[0.12rem]">
  44. Aposte mais{" "}
  45. <span className="text-[#11dd68]">
  46. {(data?.vip_score_exp || 0) - (data?.vip_exp || 0)}
  47. </span>{" "}
  48. para atualizar para
  49. <span className="text-[#11dd68]">&nbsp;VlP {data?.vip_next_level}</span>
  50. </div>
  51. <VipIcon
  52. level={data?.vip_level}
  53. className="absolute right-[0] top-[0] w-[1rem!important]"
  54. ></VipIcon>
  55. </div>
  56. <div className={clsx(styles.intro, "mt-[.3rem] text-[.12rem]")}>
  57. <div>
  58. Faça mais apostas para atualizar seu nivel VIP e aproveitar mais Bônus!
  59. </div>
  60. <div>
  61. Os tipos de crash e jogos virtuais não ganham experiência de upgrade VIP.
  62. </div>
  63. <div>Aposta de R$1,00=1XP</div>
  64. <div className="mt-[.2rem] text-center">
  65. <span
  66. className="text-[.15rem] text-[#11dd68]"
  67. onClick={() => descRef.current?.onOpen()}
  68. >
  69. Ver detalhes de nível &gt;
  70. </span>
  71. </div>
  72. </div>
  73. </div>
  74. <TipsModal
  75. title={
  76. <div
  77. className={
  78. "flex items-center justify-center p-[.1rem] text-[.16rem] text-[#ffffff]"
  79. }
  80. >
  81. O nível VIP
  82. </div>
  83. }
  84. className={clsx(styles.descBox)}
  85. getContainer={document.querySelector("#app")}
  86. ref={descRef}
  87. >
  88. {cashbackInfo && <CashbackTable cashbackInfo={cashbackInfo}></CashbackTable>}
  89. </TipsModal>
  90. </>
  91. );
  92. };
  93. export default Top;